<!--
 * @Descripttion: 
 * @Version: 
 * @Author: gaohj
 * @Date: 2022-12-29 15:50:48
 * @LastEditors: Please set LastEditors
 * @LastEditTime: 2022-12-29 17:06:16
-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 求一个数的阶乘  实参是10  10*9*8*7*6*5...*1
        function jiecheng(num){
            if(num == 1) return 1;
            var res = 1;
            for(var i=num;i>1;i--){
                res *= i;
            }
            return res;
        }


        function jiecheng1(num1){
            // 结束条件 
            if(num1 == 1) return 1;

            // 没有达到结束条件的 
            return num1 * jiecheng1(num1-1)
        }

        // 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1
        // 10 * 9 *   8 *  7 * 6 * 5 * 4 * 3 * 2 * jiecheng1(1)
        // 
        //
        //
        // 
        // 5 * jiecheng1(4)
        // 4 * jiecheng1(3)
        // 3 * jiecheng1(2)
        // 2 * jiecheng1(1)


        // 斐波那契数列 兔子繁殖  
        // 第一个月 1对兔子 第三个月开始 每个月生一对兔子
        // 月  多少对
        // 1   1
        // 2   1
        // 3   2
        // 4   3
        // 5   5 


        // 1 1  2  3 5 8 13 21  34 55 89 斐波那契数列 


        //    n1  n2  n1+n2
        // 1  1   2     3    5    8   13  21

        // 重复做的事情  

        // 始终是前两个月的和  

        // 原来给到 n2的数据给到 n1 
        // 原来给到n1+n2的数据 给到 n2

        // 第一个月 和第二个月 都是 1 百分百确定的 

        function fibonacci(month1){
            if(month1 == 0) return 0;
            if(month1 == 1 || month1 == 2) return 1;
            var n1 = n2 = 1;
            var temp = 0;
            for(var i=3;i<=month1;i++){
                temp = n1 + n2;
                n1 = n2;
                n2 = temp; 
            }
            return temp;
            
        }
        fibonacci(5)
        // 1  1  2 3  5  8

        console.log(fibonacci(11));



        // 递归  

        function fibo(month2){
            if(month2 == 1 || month2 == 2) {
                return 1;
            }
            return fibo(month2-2)+  fibo(month2-1);
            // 从第三个月开始 结果是前两个月的和 
            //  5
            // fibo(3) + fibo(4)

        }
        

        // 用户输入5 

        // fibo(4)+fibo(3) = fibo(5)

        // fibo(3)+fibo(2)+fibo(2)+fibo(1) = fibo(5)
        // fibo(2)+fibo(1)+fibo(2)+fibo(2)+fibo(1) = fibo(5)
        // // 1        1        1        1       1    = 5

        // fibo(6)+fibo(7) = fibo(8);
        //fibo(4)+fibo(5)+fibo(5)+fibo(6) = fibo(8)
        // fibo(2)+fibo(3)+fibo(3)+fibo(4)+fibo(3)+fibo(4)+fibo(4)+fibo(5) = fibo(8)
        // fibo(2)+fibo(1)+fibo(2)+fibo(1)+fibo(2)+fibo(2)+fibo(3)+fibo(1)+fibo(2)
        // 1        1       1        1
    </script>
</body>
</html>